// 闭散列表（用开放定址法解决冲突）

const int MaxSize = 100;

class CloseHash
{
private:
    int H(int k);       // 散列函数
    int ht[MaxSize];    // 闭散列表的存储结构（一个线性表）
public:
    CloseHash(/* args */);
    ~CloseHash();
    int Insert(int k); // 插入
    int Delete(int k); // 删除
    int Search(int k); // 查找
};

CloseHash::CloseHash(/* args */)
{
    for(int i = 0 ; i<MaxSize; i++)
        ht[i] = 0;  // 创建空的闭散列表
}

CloseHash::~CloseHash()
{
}

// 探测
int CloseHash::Search(int k)
{
    int i,j = H(k); // 计算散列地址
    i = j;  // 设置比较的起始位置
    while(ht[i] != 0)
    {
        if(ht[i] == k)
            return i;
        else
            i = (i+1) % MaxSize;    // 向后探测一个位置
    }
    return -1;  // 若循环结束，则探测失败
}